
function var = Bcr4bp_xx2varEMRot2D(xx , nodeType , aux)
%
% 位置速度转轨道根数
%
% 作者：张晨
% 邮箱：chenzhang@csu.ac.cn
% 单位：中国科学院空间应用工程与技术中心，空间探索室
% 时间：2022年02月23日
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

xx = xx(:);

mu = aux.EMRot.mu;

% 提取xx
x = xx(1);
y = xx(2);
vx = xx(3);
vy = xx(4);

% 旋转系 -> 惯性系 -> var
if strcmp(nodeType , 'leo')

    % 计算XX
    XX = [mu + x;
        y;
        vx - y;
        mu + vy + x];

    rMag = sqrt(XX(1)^2 + XX(2)^2);
    alpha = atan3(XX(2) , XX(1));

    % 根据角动量符号判断beta正负
    h = cross([XX(1:2) ; 0] , [XX(3:4) ; 0]);
    if h(3) > 0
        beta = sqrt(XX(3)^2 + XX(4)^2) / sqrt((1 - mu) / rMag);
    else
        beta = - sqrt(XX(3)^2 + XX(4)^2) / sqrt((1 - mu) / rMag);
    end

    % 输出var
    var = [rMag;
        alpha;
        beta;
        0];
    var = var(:)';

elseif strcmp(nodeType , 'llo')

    % 计算XX
    XX = [mu + x - 1;
        y;
        vx - y;
        mu + x - 1 + vy];

    rMag = sqrt(XX(1)^2 + XX(2)^2);
    alpha = atan3(XX(2) , XX(1));

    % 根据角动量符号判断beta正负
    h = cross([XX(1:2) ; 0] , [XX(3:4) ; 0]);
    if h(3) > 0
        beta = sqrt(XX(3)^2 + XX(4)^2) / sqrt(mu / rMag);
    else
        beta = - sqrt(XX(3)^2 + XX(4)^2) / sqrt(mu / rMag);
    end

    % 输出var
    var = [rMag;
        alpha;
        beta;
        0];
    var = var(:)';

else

    fprintf('wrong!')
    var = [];
    return;

end

end
